<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>高阶函数_函数柯里化</title>
    <style>

    </style>
</head>
<body>
<!--准备好一个容器-->
<div id="root"></div>

<!--引入React核心库-->
<script type="text/javascript" src="../0-ReactJs-v16.14.0/react.development.js"></script>
<!--引入React-Dom，用于支持React操作Dom-->
<script type="text/javascript" src="../0-ReactJs-v16.14.0/react-dom.development.js"></script>
<!--引入babel，用于将jsx转为js-->
<script type="text/javascript" src="../0-ReactJs-v16.14.0/babel.min.js"></script>

<script type="text/babel">

    //创建组件
    class Login extends React.Component {
        /*
            高阶函数：如果一个函数符合下面2个规范中的任何一个，那么该函数就是高阶函数
                1、若A函数，接收的参数是一个函数，那么A就可以称之为高阶函数；
                2、若A函数，调用的返回值依然是一个函数，那么A就可以称之为高阶函数。
                常见的高阶函数有：Promise、setTimeout、arr.map()等等

            函数的柯里化：通过函数调用继续返回函数的方式，实现多次接收参数最后统一处理的函数编码的形式。
         */

        //初始化状态
        state = {
            userName:'',
            passWord:''
        }

        saveFormData = (dataType)=>{
            return (event)=>{
                console.log(dataType,event.target.value)
                this.setState({
                    [dataType]:event.target.value
                })
            }
        }

        handleSubmit = (event) => {
            event.preventDefault()//阻止表单提交
            const {userName,passWord} = this.state
            alert(`你输入的用户名是${userName}，你输入的密码是${passWord}`)
        }

        render() {
            return (
                <form onSubmit={this.handleSubmit}>
                    用户名：<input onChange={this.saveFormData('userName')} type="text" name="userName"/>
                    密码：<input onChange={this.saveFormData('passWord')} type="password" name="passWord"/>
                    <button>登陆</button>
                </form>
            )
        }
    }

    //渲染组件到页面
    ReactDOM.render(<Login/>, document.getElementById('root'));

</script>

</body>
</html>
